package com.clientservice;

import com.qqcommon.Message;
import com.qqcommon.MessageType;

import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.net.Socket;
import java.util.ArrayList;

/**
 * @author wty
 * @date 2022/10/25 14:40
 */
@SuppressWarnings({"all"})
public class ClientConnectServerThread extends Thread {
    // 该线程必须持有Socket
    private Socket socket = null;

    // 为了更方便的得到Socket
    public Socket getSocket() {
        return socket;
    }

    public void setSocket(Socket socket) {
        this.socket = socket;
    }

    // 构造器可以接收一个Socket对象
    public ClientConnectServerThread(Socket socket) {
        this.socket = socket;
    }

    /**
     *
     */
    @Override
    public void run() {
        // 因为Thread需要在后台和服务通信，因此我们做成while循环
        while (true) {
            System.out.println("客户端等待读取从服务端发送的消息…………");

            ObjectInputStream objectInputStream = null;
            try {
                // 这里是等待读取，所以是getInputStream
                objectInputStream = new ObjectInputStream(socket.getInputStream());
                // 向下转型成Message对象
                // 如果服务端没有发送Object对象，那么会一直阻塞
                Object o = objectInputStream.readObject();
                if (o instanceof ArrayList){
                    // 离线消息，如果给同一个用户发送多条
                    // 强制转换：向下转型
                    ArrayList<Message> list = (ArrayList<Message>) o;
                    System.out.println("=====<离线消息 开始>=====");
                    // 正序
                    for (int i = list.size() - 1; i >= 0; i--) {
                        Message message = list.get(i);
                        if(message.getType().equals(MessageType.MESSAGE_COMMON)){
                            // 离线私聊
                            System.out.println(message.getSendTime() + "  "+message.getSender()+"对"+message.getReceiver()+"说：\n" + message.getContent());
                        }
                        // 离线图片发送
                        if(message.getType().equals(MessageType.MESSAGE_FILE)){
                            // 接收图片
                            System.out.println(message.getSendTime() + "\n"+message.getSender()+"给"+message.getReceiver()+"发送文件："+message.getPath()+"\n到我的电脑目录" + message.getTargetPath());
                            FileOutputStream fileOutputStream = new FileOutputStream(message.getTargetPath());
                            fileOutputStream.write(message.getFileByte());
                            fileOutputStream.close();
                            System.out.println("保存文件成功!");
                        }
                    }
                    // 倒叙
//                    for (Message message : list) {
//                        if(message.getType().equals(MessageType.MESSAGE_COMMON)){
//                            // 离线私聊
//                            System.out.println(message.getSendTime() + "  "+message.getSender()+"对"+message.getReceiver()+"说：\n" + message.getContent());
//                        }
//                    }

                    System.out.println("=====<离线消息 结束>=====");


                }else {

                    Message message = (Message) o;

                    // 后面要处理这个message
                    // 判断这个message类型，然后做相应的业务处理
                    if (message.getType().equals(MessageType.MESSAGE_ONLINEFRIEND)){
                        // 取出在线用户并返回
                        String[] content = message.getContent().split(" ");
                        System.out.println("\n=====当前在线用户列表=====");
                        for (int i = 0; i < content.length; i++) {
                            System.out.println("用户: " + content[i]);
                        }

                    } else if(message.getType().equals(MessageType.MESSAGE_COMMON)){
                        // 私聊
                        System.out.println(message.getSendTime() + "\n"+message.getSender()+"对"+message.getReceiver()+"说：\n" + message.getContent());

                    } else if(message.getType().equals(MessageType.MESSAGE_EVERYONE)){
                        // 群聊
                        System.out.println(message.getSendTime() + "\n"+message.getSender()+"对大家说：\n" + message.getContent());
                    } else if(message.getType().equals(MessageType.MESSAGE_FILE)){
                        // 接收图片
                        System.out.println(message.getSendTime() + "\n"+message.getSender()+"给"+message.getReceiver()+"发送文件："+message.getPath()+"\n到我的电脑目录" + message.getTargetPath());
                        FileOutputStream fileOutputStream = new FileOutputStream(message.getTargetPath());
                        fileOutputStream.write(message.getFileByte());
                        fileOutputStream.close();
                        System.out.println("保存文件成功!");
                    }else {
                        System.out.println("检测到message类型为其它类型，暂时不处理");
                    }
                }

            } catch (Exception e) {
                e.printStackTrace();
            } finally {
/**               if (objectInputStream != null) {
                    try {
                        objectInputStream.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }*/
            }
        }

    }
}
